<?php

require_once dirname(__FILE__).'/../lib/recibosGeneratorConfiguration.class.php';
require_once dirname(__FILE__).'/../lib/recibosGeneratorHelper.class.php';
require_once dirname(__FILE__).'/../../../../../lib/impresion/fpdf.php';

/**
 * recibos actions.
 *
 * @package    gescell
 * @subpackage recibos
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
 */
class recibosActions extends autoRecibosActions
{
  protected function  Centenas($VCentena) 
{ 
       $Numeros[0] = "cero";
       $Numeros[1] = "uno";
       $Numeros[2] = "dos";
       $Numeros[3] = "tres";
       $Numeros[4] = "cuatro";
       $Numeros[5] = "cinco";
       $Numeros[6] = "seis";
       $Numeros[7] = "siete";
       $Numeros[8] = "ocho";
       $Numeros[9] = "nueve";
       $Numeros[10] = "diez";
       $Numeros[11] = "once";
       $Numeros[12] = "doce";
       $Numeros[13] = "trece";
       $Numeros[14] = "catorce";
       $Numeros[15] = "quince";
       $Numeros[20] = "veinte";
       $Numeros[30] = "treinta";
       $Numeros[40] = "cuarenta";
       $Numeros[50] = "cincuenta";
       $Numeros[60] = "sesenta";
       $Numeros[70] = "setenta";
       $Numeros[80] = "ochenta";
       $Numeros[90] = "noventa";
       $Numeros[100] = "ciento";
       $Numeros[101] = "quinientos";
       $Numeros[102] = "setecientos";
       $Numeros[103] = "novecientos";
       If ($VCentena == 1) { return $Numeros[100]; }
       Else If ($VCentena == 5) { return $Numeros[101];}
       Else If ($VCentena == 7 ) {return ( $Numeros[102]); }
       Else If ($VCentena == 9) {return ($Numeros[103]);}
       Else {return $Numeros[$VCentena];}

   }
protected function Unidades($VUnidad) 
{
$Numeros[0] = "cero";
$Numeros[1] = "un";
$Numeros[2] = "dos";
$Numeros[3] = "tres";
$Numeros[4] = "cuatro";
$Numeros[5] = "cinco";
$Numeros[6] = "seis";
$Numeros[7] = "siete";
$Numeros[8] = "ocho";
$Numeros[9] = "nueve";
$Numeros[10] = "diez";
$Numeros[11] = "once";
$Numeros[12] = "doce";
$Numeros[13] = "trece";
$Numeros[14] = "catorce";
$Numeros[15] = "quince";
$Numeros[20] = "veinte";
$Numeros[30] = "treinta";
$Numeros[40] = "cuarenta";
$Numeros[50] = "cincuenta";
$Numeros[60] = "sesenta";
$Numeros[70] = "setenta";
$Numeros[80] = "ochenta";
$Numeros[90] = "noventa";
$Numeros[100] = "ciento";
$Numeros[101] = "quinientos";
$Numeros[102] = "setecientos";
$Numeros[103] = "novecientos";

$tempo=$Numeros[$VUnidad]; 
return $tempo;
}
protected function Decenas($VDecena) 
{
$Numeros[0] = "cero";
$Numeros[1] = "uno";
$Numeros[2] = "dos";
$Numeros[3] = "tres";
$Numeros[4] = "cuatro";
$Numeros[5] = "cinco";
$Numeros[6] = "seis";
$Numeros[7] = "siete";
$Numeros[8] = "ocho";
$Numeros[9] = "nueve";
$Numeros[10] = "diez";
$Numeros[11] = "once";
$Numeros[12] = "doce";
$Numeros[13] = "trece";
$Numeros[14] = "catorce";
$Numeros[15] = "quince";
$Numeros[20] = "veinte";
$Numeros[30] = "treinta";
$Numeros[40] = "cuarenta";
$Numeros[50] = "cincuenta";
$Numeros[60] = "sesenta";
$Numeros[70] = "setenta";
$Numeros[80] = "ochenta";
$Numeros[90] = "noventa";
$Numeros[100] = "ciento";
$Numeros[101] = "quinientos";
$Numeros[102] = "setecientos";
$Numeros[103] = "novecientos";
$tempo = ($Numeros[$VDecena]);
return $tempo;
}
protected function NumerosaletrasRecibos($Numero)
{
$Decimales = 0;
//$Numero = intval($Numero);
$letras = '';

while ($Numero != 0){

// '*---> Validación si se pasa de 100 millones

If ($Numero >= 1000000000) {
$letras = "Error en Conversi&oacute;n a Letras";
$Numero = 0;
$Decimales = 0;
}

// '*---> Centenas de Millón
If (($Numero < 1000000000) And ($Numero >= 100000000)){
If ((Intval($Numero / 100000000) == 1) And (($Numero - (Intval($Numero / 100000000) * 100000000)) < 1000000)){
$letras .= (string) "cien millones ";
}
Else {
$letras = $letras & $this->Centenas(Intval($Numero / 100000000));
If ((Intval($Numero / 100000000) <> 1) And (Intval($Numero / 100000000) <> 5) And (Intval($Numero / 100000000) <> 7) And (Intval($Numero / 100000000) <> 9)) {
$letras .= (string) "cientos ";
}
Else {
$letras .= (string) " ";
} 
}
$Numero = $Numero - (Intval($Numero / 100000000) * 100000000);
}

// '*---> Decenas de Millón
If (($Numero < 100000000) And ($Numero >= 10000000)) {
If (Intval($Numero / 1000000) < 16) {
$tempo = $this->Decenas(Intval($Numero / 1000000));
$letras .= (string) $tempo; 
$letras .= (string) " millones ";
$Numero = $Numero - (Intval($Numero / 1000000) * 1000000);
}
Else { 
$letras = $letras & $this->Decenas(Intval($Numero / 10000000) * 10);
$Numero = $Numero - (Intval($Numero / 10000000) * 10000000);
If ($Numero > 1000000) {
$letras .= $letras & " y ";
}
}
}

// '*---> Unidades de Millón
If (($Numero < 10000000) And ($Numero >= 1000000)) {
$tempo=(Intval($Numero / 1000000));
If ($tempo == 1) { 
$letras .= (string) " un mill&oacute;n ";
} 
Else {
$tempo= $this->Unidades(Intval($Numero / 1000000));
$letras .= (string) $tempo; 
$letras .= (string) " millones ";
}
$Numero = $Numero - (Intval($Numero / 1000000) * 1000000);
}

// '*---> Centenas de Millar
If (($Numero < 1000000) And ($Numero >= 100000)) {
$tempo=(Intval($Numero / 100000));
$tempo2=($Numero - ($tempo * 100000));
If (($tempo == 1) And ($tempo2 < 1000)) {
$letras .= (string) "cien mil ";
} 
Else {
$tempo=$this->Centenas(Intval($Numero / 100000));
$letras .= (string) $tempo;
$tempo=(Intval($Numero / 100000));
If (($tempo <> 1) And ($tempo <> 5) And ($tempo <> 7) And ($tempo <> 9)) {
$letras .= (string) "cientos ";
} 
Else { 
$letras .= (string) " ";
}
}
$Numero = $Numero - (Intval($Numero / 100000) * 100000);
}

// '*---> Decenas de Millar
If (($Numero < 100000) And ($Numero >= 10000)) {
$tempo= (Intval($Numero / 1000));
If ($tempo < 16) {
$tempo = $this->Decenas(Intval($Numero / 1000)); 
$letras .= (string) $tempo;
$letras .= (string) " mil ";
$Numero = $Numero - (Intval($Numero / 1000) * 1000);
}
Else {
$tempo = $this->Decenas(Intval($Numero / 10000) * 10);
$letras .= (string) $tempo;
$Numero = $Numero - (Intval(($Numero / 10000)) * 10000);
If ($Numero > 1000) {
$letras .= (string) " y "; 
}
Else {
$letras .= (string) " mil ";

}
}
}


// '*---> Unidades de Millar
If (($Numero < 10000) And ($Numero >= 1000)) {
$tempo=(Intval($Numero / 1000));
If ($tempo == 1) {
$letras .= (string) "un";
} 
Else {
$tempo = $this->Unidades(Intval($Numero / 1000));
$letras .= (string) $tempo;
}
$letras .= (string) " mil ";
$Numero = $Numero - (Intval($Numero / 1000) * 1000);
}

// '*---> Centenas
If (($Numero < 1000) And ($Numero > 99)) { 
     If ((Intval($Numero / 100) == 1) And (($Numero - (Intval($Numero / 100) * 100)) < 1)) {
//MOdificado por marcelo por problemas con el Cien And (($Numero - (Intval($Numero / 100) * 100)) < 1)
//If ((Intval($Numero / 100) == 1) ) {
$letras = $letras . "cien ";
} 
Else { 
$temp=(Intval($Numero / 100)); 
$l2=$this->Centenas($temp); 
$letras .= (string) $l2; 
If ((Intval($Numero / 100) <> 1) And (Intval($Numero / 100) <> 5) And (Intval($Numero / 100) <> 7) And (Intval($Numero / 100) <> 9)) {
$letras .= "cientos ";
} 
Else {
$letras .= (string) " ";
}
}

$Numero = $Numero - (Intval($Numero / 100) * 100);

}

// '*---> Decenas
If (($Numero < 100) And ($Numero > 9) ) {
If ($Numero < 16 ) {
$tempo = $this->Decenas(Intval($Numero));
$letras .= $tempo;
$Numero = $Numero - Intval($Numero);
} 
Else { 
$tempo= $this->Decenas(Intval(($Numero / 10)) * 10);
$letras .= (string) $tempo; 
$Numero = $Numero - (Intval(($Numero / 10)) * 10);
If ($Numero > 0.99) {
$letras .=(string) " y ";

}
}
}

// '*---> Unidades
If (($Numero < 10) And ($Numero > 0.99)) {
$tempo=$this->Unidades(Intval($Numero));
$letras .= (string) $tempo;

$Numero = $Numero - Intval($Numero);
}


// '*---> Decimales
If ($Decimales > 0) {

// $letras .=(string) " con ";
// $Decimales= $Decimales*100;
// echo ("*"); 
// $Decimales = number_format($Decimales, 2); 
// echo ($Decimales); 
// $tempo = Decenas(Intval($Decimales)); 
// $letras .= (string) $tempo;
// $letras .= (string) "centavos";
} 
Else {
If (($letras <> "Error en Conversión a Letras") And (strlen(Trim($letras)) > 0)) {
$letras .= (string) " ";
}
}
return $letras;
}

}





    public function executeNew(sfWebRequest $request){
       parent::executeNew($request);
       //$this->form->facturaid = $request->getParameter('factura_id');
       $this->form->reciboid  = $request->getParameter('recibo_id');


       $recibos = recibosPeer::retrieveByPK($this->form->reciboid);
       $factura = $recibos->getfacturas();
       $this->form->factura = facturasPeer::retrieveByPK($recibos->getFacturasId());
       $this->form->setDefault('recibos_id',$this->form->reciboid);
       $this->form->setDefault('importe', $factura->getTotal() - $factura->getTotalPagado());
       //$this->form->setDefault('fechavencimiento', mktime(0,0,0,Date('m')+1,date('d'),date('Y') ));

       $this->form->setDefault('valorestipo_id',1 );
       $this->form->setDefault('fecha', time());
       }
    public function executeCreate(sfWebRequest $request)
    {
    $this->form = $this->configuration->getForm();
    $this->recibosportipovalor = $this->form->getObject();
    
    $this->processForm($request, $this->form);
    $this->setTemplate('new');
    //$this->redirect('recibos/new?recibo_id='.$recibo['recibos_id']);
    
    
    }
   
    public function executeList_ver_recibos(){
        $recibos_id = $this->getRequest()->getParameter('id');
        $this->cabecera = recibosPeer::getCabeceraRecibo($recibos_id);
        $this->detalles = recibosPeer::getDetalles($recibos_id);
    }
    public function executeBorrar_detalle(sfWebRequest $request){
        //$this->forward404Unless($request->isMethod('post'));
        //Agregado
          $id = $this->getRequest()->getParameter('id');
          $recibosportipovalores = recibosportipovalorPeer::retrieveByPK($id);
          if(!$recibosportipovalores->EsBorrable())
             $this->redirect('facturas/mensaje?mensaje=Lo sentimos pero la caja esta cerrada y ya no es posible modificar los datos');
             $recibos = recibosPeer::retrieveByPK($recibosportipovalores->getRecibosId());
             $facturas = facturasPeer::retrieveByPK($recibos->getFacturasId());
             $recibosportipovalores->delete();
             $facturas->save();
             
             if($recibos->getMonto() == 0){
                  $recibos->delete();
                  $this->getUser()->setFlash('notice', 'El Recibo se Borro de la base de Datos.');
                  $this->redirect('@facturas');
             }
             $this->getUser()->setFlash('notice', 'El Pago se borro de la base de datos.');
             $this->redirect('recibos/List_ver_recibos?id='.$recibosportipovalores->getRecibosId());
    }

    protected function ImprimirRecibo($id)
     {
  	
                //Obtener el Recibo
                //$id = $request->getParameter('id');
                $recibo = recibosPeer::retrieveByPK($id);
                //Detalles del recibo
		$detalles = $recibo->getrecibosportipovalors();
                //Hasta aca
                //Seteo de Fuentes y Colores
		//---------------------------------
		//Creacion del Encabezado desde la base de datos
		//----------------------------------------
                /*Set fonts y colores
                $pdf=new FPDF();$pdf->Open();$pdf->Header();$pdf->AddPage();
		$pdf->SetFont('Arial','B',12);
		$pdf->SetFillColor(0,0,102);
		$pdf->SetTextColor(0,0,102);
                $criteria = new criteria();
                $criteria->add(empresaPeer::ACTIVO,true);
                $empresa = empresaPeer::doSelectOne($criteria);

		$pdf->Cell(180,10,$empresa->getNombreEmpresa(),0,1,'C',0);
                $pdf->SetFont('Arial','B',8);
		$pdf->Cell(60,10,utf8_decode('Dirección: '.$empresa->getDireccion()),0,0,'C',0);
		$pdf->Cell(60,10,'Telefono: '.$empresa->getTelefono(),0,0,'C',0);
		$pdf->Cell(60,10,'E-mail: '.$empresa->getCorreoEmpresa(),0,1,'C',0);
                //--------------------------------------- */
                $pdf = informes::CrearReporte('Recibo');

                $pdf->SetFont('Arial','B',12);
		$pdf->SetFillColor(255,255,255);
		$pdf->SetTextColor(0,0,0);
		//
		  $pago = $recibo->getNumeropago();
		  $pdf->SetFillColor(120,120,120);
		  $pdf->SetTextColor(255,255,255);
		  $pdf->Cell(50,7,'Nro. '.$pago,0,0,'L',1);
		  $pdf->SetFillColor(255,255,255);
		  $pdf->SetTextColor(0,0,0);
		  $pdf->Cell(50,7,'Recibo de Dinero',0,0,'C');
		  $pdf->SetFillColor(120,120,120);
		  $pdf->SetTextColor(255,255,255);
                  $monto = number_format($recibo->getMonto(),0,'','.').' Gs';
		  $pdf->Cell(50,7,$monto,0,1,'R',1);
		  $pdf->SetFillColor(255,255,255);
		  $pdf->SetTextColor(0);
		  $pdf->SetLineWidth(.1);
		  $tt = $recibo->getMonto();
          $tt = $tt+0.009;
          $Numero = intval($tt);
          $Decimales = $tt - Intval($tt);
          $Decimales= $Decimales*100;
          $Decimales= Intval($Decimales);
          $x=$this->NumerosaletrasRecibos($Numero);
          $y=$this->NumerosaletrasRecibos($Decimales);
          $v=($x).($y).('guaranies');
		  switch (date("m"))
		  {
                 case 1:
		               $mes= "Enero";
					   break;
				 case 2:
		               $mes= "Febrero";
					   break;
                 case 3:
		               $mes= "Marzo";
					   break;
				 case 4:
		               $mes= "Abril";
					   break;
                 case 5:
		               $mes= "Mayo";
					   break;
				 case 6:
		               $mes= "Junio";
					   break;
                 case 7:
		               $mes= "Julio";
					   break;
				 case 8:
		               $mes= "Agosto";
					   break;
                 case 9:
		               $mes= "Septiembre";
					   break;
				 case 10:
		               $mes= "Octubre";
					   break;
                 case 11:
		               $mes= "Noviembre";
					   break;
				 case 12:
		               $mes= "Dicembre";
					   break;
		  }
		  $pdf->Cell(150,6,'',0,1,'C',1);
		  $pdf->Cell(150,7,utf8_decode(date("d").' de '.$mes.' del año '.date("Y")),0,1,'R',1);
		  $pdf->Cell(150,10,'',0,1,'C',1);
		  $pdf->Cell(150,7,utf8_decode('Recibí de:  '.$recibo->getclientes(). ' la suma de'),0,1,'L',1);
		  $pdf->Cell(150,7, strtoupper($v),0,1,'L',0);
		  $pdf->Cell(150,7,'en concepto de pagos por la Factura Numero: '.$recibo->getfacturas(),0,1,'L',0);
		  if($detalles){
                      $pdf->SetFont('Arial','B',8);
                      $pdf->Cell(150,7,'Pagados con los Siguientes Instrumentos: ',0,1,'L',1);
                      $pdf->SetFillColor(120,120,120);
                      $pdf->SetTextColor(255,255,255);
                      $pdf->Cell(30,7,'Tipo de Pago',1,0,'C',1); $pdf->Cell(30,7,'Monto Pagado',1,0,'C',1); $pdf->Cell(30,7,'Entidad Emisora',1,0,'C',1); $pdf->Cell(30,7,'Numero Documento',1,0,'C',1); $pdf->Cell(30,7,'Fecha Vencimiento',1,1,'C',1);
                      $pdf->SetFillColor(255,255,255);
                      $pdf->SettextColor(0);

                  }
                  foreach($detalles as $detalles){
                       $pdf->Cell(30,7,$detalles->getValoresTipo(),1,0,'C',0);
                       $pdf->Cell(30,7,$detalles->getImporte(),1,0,'C',0);
                       $pdf->Cell(30,7,utf8_decode($detalles->getEntidademisora()),1,0,'C',0);
                       $pdf->Cell(30,7,utf8_decode($detalles->getNumerodocumento()),1,0,'C',0);
                       $pdf->Cell(30,7,$detalles->getFechavencimiento('d/m/Y'),1,1,'C',0);
                  
                  }
                  $pdf->SetFont('Arial','B',12);
		  $pdf->Cell(150,5,'',0,1,'R',0);
		  $pdf->Cell(150,10,'__________________',0,1,'R',0);
                  $pdf->Cell(135,10,'Firma',0,1,'R',0);
		  $pdf->Output('recibo :'.$recibo->getNumeropago().'-factura:'.$recibo->getFacturas().'fecha_'.date('Y-m-d').'.pdf','D');
		return sfView::NONE;
  }
  public function executeImprimir($request){
      $id = $request->getParameter('recibo_id');
      $this->ImprimirRecibo($id);
  }

    public function executeMensaje(){
        $this->vuelto  = $this->getrequest()->getParameter('vuelto');
        $this->id = $this->getrequest()->getParameter('recibo_id');
    }
    //------------------------------------------------------------------------------------
    protected function verificarPago($pago,$facturas){
        $mensaje = null;
        if ($pago['valorestipo_id'] <> 1){
           if(!$pago['numerodocumento'])
               $mensaje = 'Debe ingresar el Numero del cheque o tarjeta;';
           if(!($pago['entidademisora']))
               $mensaje = $mensaje.'Debe ingresar la entidad emisora';
           if(($pago['fechavencimiento']['year']==''))
               $mensaje = $mensaje.'Debe ingresar la fecha de Vencimiento';
        }
        if (!$mensaje)
            switch ($pago['importe']){
                  case 0:
                      $mensaje = 'El Importe no puede ser Cero';break;
                  case ($pago['importe'] < 0):
                     $mensaje = $mensaje.'El Importe no puede ser Negativo';break;
                 //Este caso el pago es mayor al monto debido hay vuelto
                  case ($pago['importe'] > ($facturas->getTotal() - $facturas->getTotalPagado() )):
                          $vuelto = $pago['importe'] - ($facturas->getTotal() - $facturas->getTotalPagado() );
                          $pago['importe'] = ($facturas->getTotal() - $facturas->getTotalPagado() );
                          $mensaje = $mensaje.'Se completo el pago de la Factura: '.$facturas->getNumeroDeComprobante().', El vuelto es: ';
                          if ($pago['importe']){
                             $recibosportipovalor = new recibosportipovalor();
                             $recibosportipovalor->setValorestipoId($pago['valorestipo_id']);
                             $recibosportipovalor->setrecibosId($pago['recibos_id']);
                             $recibosportipovalor->setentidademisora($pago['entidademisora']);
                             $recibosportipovalor->setNumerodocumento($pago['numerodocumento']);
                             $recibosportipovalor->setImporte($pago['importe']);
                             $fecha = mktime(0, 0, 0,$pago['fecha']['month'], $pago['fecha']['day'],  $pago['fecha']['year']);
                             $fechavencimiento = null;
                             if($pago['valorestipo_id'] <> 1){
                                 $fechavencimiento=  mktime(0, 0, 0,$pago['fechavencimiento']['month'],$pago['fechavencimiento']['day'],  $pago['fechavencimiento']['year']);
                             }
                             $recibosportipovalor->setFecha($fecha);
                             $recibosportipovalor->setFechavencimiento($fechavencimiento);
                             $recibosportipovalor->save();
                             //$factura->setPagado lo voy a mover al factura save hina
                             //$facturas->setPagado(true);
                             $facturas->save();
                          }
                          if ($vuelto > 0){
                               $this->getUser()->setFlash('notice', $mensaje.$vuelto);
                               $this->redirect('recibos/mensaje?vuelto='.$vuelto.'&'.'recibo_id='.$pago['recibos_id']);
                          }
                          break;
               }
               return $mensaje;
    }
    //----------------------------------------------------------
     protected function processForm(sfWebRequest $request, sfForm $form){

    $pago = $request->getParameter('recibosportipovalor');
    $recibos = recibosPeer::retrieveByPK($pago['recibos_id']);
    $facturas = $recibos->getfacturas();
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    $mensaje = $this->verificarPago($pago,$facturas);
    if(!$mensaje){
        if($form->isValid()){
            $recibosportipovalor = $form->save();
            if($request->hasParameter('_save_and_add')){
                if ($facturas->getPagado()){
                    $this->redirect('recibos/list_ver_recibos?id='.$recibos->getId());    
                }
                $this->getUser()->setFlash('notice','Agregado Correctamente, Puede Agregar Nuevos Tipos de Pagos');
                $this->redirect('recibos/new?recibo_id='.$recibos->getId());
            }
             $this->redirect('recibos/list_ver_recibos?id='.$recibos->getId());
        }
    }
    $this->getUser()->setFlash('error', 'No fue valido el Formulario:'. $mensaje);
    $this->redirect('recibos/new?recibo_id='.$recibos->getId());
    }
    //----------------------------------------------------------

    
}
